// 分数到小数

package Leetcode;

import java.util.HashMap;
import java.util.Map;

class Solution166 {
    public static void main(String[] args) {
        int a = 1;
        int b = 7;
        System.out.println(a / b);
    }

    public String fractionToDecimal(int numerator, int denominator) {
        StringBuilder sb = new StringBuilder();
        // 检查是否为负数
        long a = numerator; //这里一定要转为long类型，否则1/Integer.MAXVALUE会越界
        long b = denominator;
        if (a * b < 0)
            sb.append("-");
        // 变为正数
        a = Math.abs(a);
        b = Math.abs(b);

        // 找到商
        long result = a / b;
        sb.append(result);

        // 如果余数为0
        if (a % b == 0)
            return sb.toString();

        // 如果存在余数
        sb.append(".");

        Map<Long, Integer> map = new HashMap<>(); // <商，余数>
        while ((a = a % b * 10) != 0 && map.containsKey(a) == false) {
            map.put(a, sb.length()); // 当余数重复就表示循环了，因为除数永远为b
            sb.append(a / b);
        }
        if (a == 0) // 除尽了
            return sb.toString();

        return sb.insert(map.get(a).intValue(), "(")
                .append(")").toString();

    }
}
